一、Nodejs 基础
(一) 第一个 node 应用
新建 app.js,代码如下
var http = require('http');
http.createServer(function (request, response) {
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
// 内容类型: text/plain
response.writeHead(200, {
'Content-Type': 'text/plain'
});
response.end('Hello World');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
启动服务
node app.js
(二) nodejs 的模块系统
1. nodejs模块系统介绍
一个js文件就是一个模块, 一个模块会有一些变量或者方法,可以导出这些变量或者方法提供给别的模块进行使用, 它也可以导入别的模块或者方法来使用
2. 导出模块和导入模块
// 例子1
// m1.js, 导出一个数组, 导出使用module.exports
module.exports = [1,2,3];
// index1.js 导入m1模块, 导入用 require(模块路径)
let list = require('./m1');
console.log(list);
// 运行index1.js
node index1.js
// 例子2
// m2.js 导出一个函数
function add(a,b) {
return a+b;
}
module.exports = add;
// index2.js 导入m2模块
let add = require('./m2');
// 调用m2中的add方法
let sum = add(100, 200);
console.log('sum', sum);
// 运行 index2.js
node index2.js
// 例子3
// m3.js 导出一个对象
var username = '张三';
var age = 100;
function say() {
console.log('我是' + username);
}
module.exports = {
username: username,
age: age,
say: say
}
// index3.js 导入m3模块
let obj = require('./m3');
console.log('用户名', obj.username);
obj.say();
// 运行 index3.js
node index3.js
(三) 文件系统
读取文件
// 例子1 异步读取文件内容 // index1.js var fs = require("fs"); console.log(1); // 异步读取 fs.readFile('input.txt', function (err, data) { console.log(2); if (err) { return console.error(err); } console.log("异步读取: " + data.toString()); }); console.log(3);
// 例子2 同步读取文件内容 var fs = require('fs'); // 同步读取 var data = fs.readFileSync('input.txt'); console.log("同步读取: " + data.toString()); console.log("程序执行完毕。");
写入文件
// 例子1 异步写入文件内容 var fs = require("fs"); console.log("准备写入文件"); var str = '困难是我们的食物'; fs.writeFile('data.txt', str, function (err) { if (err) { return console.error(err); } console.log('文件写入成功') });
// 例子2 同步读取 var fs = require("fs"); var str = '困难是我们的食物'; fs.writeFileSync2('data.txt', str); console.log('文件写入成功'); // 添加trycatch可以捕捉写入过程中发生的错误 try { fs.writeFileSync2('data.txt', str); console.log('文件写入成功'); } catch (error) { console.log('错误信息', error); }
(四) nodejs原生路由
路由介绍: 路由字面意思是"途经", 路途经过什么地方的意思,没有两个地方的风景是一样, 所以你经过不同的地方, 看到的风景是不一样的,网站上的路由也类似这样的意思, 你访问不同的url, 那么你看到的东西也是不一样的。
// app.js nodejs原生路由简单例子
var http = require("http");
var fs = require("fs");
http
.createServer((req, res) => {
switch (req.url) {
case "/hello":
res.write("hello");
res.end();
break;
case "/hehe":
res.write("hehe");
res.end();
break;
case "/my":
fs.readFile("./dist/1.txt", (error, data) => {
if (error) throw error;
res.write(data);
res.end();
});
break;
default:
res.write("this is home");
res.end();
break;
}
})
.listen(3000, "localhost", () => {
console.log("服务器运行在:http://localhost:3000");
});
// 运行代码
node app.js
// 访问以下地址看看有什么不一样
http://localhost:3000/hello
http://localhost:3000/hehe
http://localhost:3000/my
http://localhost:3000
(五) path模块
path模块介绍: nodejs自带的模块, 主要用来解决路径相关问题
- path.join(),因为window和linux系统分割符不一致,join可以解决这个问题
let path = require('path')
let str1 = path.join('/nodejs','dist');
console.log(str1); // /nodejs/dist
let str2 = path.join('\\nodejs','dist');
console.log(str2); // /nodejs/dist
- path.resolve 把路径变成绝对路径
let path = require('path')
let str = path.resolvepath.resolve('nodejs','dist');
console.log(str); // C:\Users\Administrator\Desktop\web04\nodejs\path\nodejs\dist
- __dirname 当前目录
let path = require('path');
console.log(__dirname);
// C:\Users\Administrator\Desktop\web04\nodejs\path
let str = path.resolve(__dirname,'dist');
C:\Users\Administrator\Desktop\web04\nodejs\path\dist
(六) 服务器自动重启
- 全局安装
nodemon
- 运行
node app.js
需要使用nodemon app.js
来代替 - 示例: 新建
app.js
, 然后执行nodemon app.js
, 然后修改输出内容试试
var http = require('http');
http.createServer(function (request, response) {
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
// 内容类型: text/plain
response.writeHead(200, {
'Content-Type': 'text/plain'
});
response.end('Hello World');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
(七) 调试代码
调试项目
参考链接: https://www.ruanyifeng.com/blog/2018/03/node-debugger.html
最简单的一种方法:
执行
nodemon app.js
时添加--inspect
nodemon --inspect app.js
执行以上命令之后, 打开控制台, 左上角有个绿色的按钮, 点击它会弹出一个控制台
快捷键
ctrl+p
, 然后输入app.js
, 接下来的事情就跟调试前端代码一样了
调试单个js文件
node --inspect-brk xxx.js
浏览器打开: chrome://inspect/#devices
点击 inspect按钮
(八) 操作本地文件
读取文件目录
fs.readdirSync();
获取文件信息
fs.stat(path, callback); fs.statSync(); var stat = fs.statSync(filename); console.log(stat) 1. stat.isFile() 是文件 2. stat.isDirectory() 是目录 3. stat.atime 访问时间 4. stat.mtime 修改时间 5. stat.ctime 创建时间
把数据保存到本地
// demo.js let fs = require('fs'); let list = [ {name: '张三',age:18}, {name: '李四',age:19}, {name: '王五',age:29} ] fs.writeFileSync('list.json',JSON.stringify(list))
执行
node demo.js
, 就可以将列表保存到本地的list.json
文件里
(九) nodejs版本切换
下载安装 nvm
https://nvm.en.softonic.com/
nvm命令
nvm // 会提示nvw下的相关命令
nvm ls // 查看已安装node版本
nvm install 10 // 安装对应10.0版本的node
nvm uninstall 10 // 卸载对应10.0版本的node
nvm use xxx // 选择使用XXX版本
nvm alias default 10 // 默认nodejs版本号